#04 : ハンズオンラボガイド「データのロード」 – Snowflake Advent Calendar 2019 #SnowflakeDB
こんにちは、DA部プリセールスエンジニアの兼本です。
当エントリは『Snowflake Advent Calendar 2019』の04日目のエントリです。
Snowflake Advent Calendar 2019 - Qiita
Snowflake Advent Calendar 2019 | シリーズ | Developers.IO
はじめに
この演習ではSnowflake上に作成したデータベーステーブルに対して、仮想ウェアハウスを使ってAmazon S3に保存されているCSVファイルをバルクロードする演習を行います。
注意書きにも記載されている通り、演習ではシンプルにするためにSYSADMIN
ロールを利用していますが、ロールとして通常SYSADMIN
は利用しませんのでご注意ください。
なお、この演習ではデータ保管用のクラウドストレージとしてAmazon S3を使用していますが、SnowflakeはMicrosoft Azure StorageやGoogle Cloud Storageもサポートしています。
前提条件
「Module 4: データのロード」では、「Module 3: ロードするデータの準備」で用意したウェアハウス、データベースなどを利用して進めていきますので、まだの方は先に「Module 3」をお試しください。
また、ハンズオンラボガイドにある通り、演習の中のクエリは下記のファイルに記載されているので事前にダウンロードしてワークシートにロードしておくと便利です。
それでは、ハンズオンの資料に沿って進めていきましょう。
4.1 データロードの準備
Snowflakeではデータのロードを行う際にコンピュートノードと呼ばれる(仮想)ウェアハウスを使用します。
ウェアハウスは用途にあわせて複数作成することができ、そのサイズ(スペック)もデータ量や期待するパフォーマンスに合わせて動的に変更することが可能です。
ハンズオンで使用する環境にはすでにCOMPUTE_WH
という名前のウェアハウスが作成済みです。
ウェアハウスのサイズはがデータのロードに対してどのように作用するのかを知るため、演習の最初の手順では、ウェアハウスのサイズを変更しています。
なお、ウェアハウスにはTシャツのサイズのようにXSから4XLまでのサイズが用意されています。
ウェアハウスに関する詳細は以下の記事をご参照ください。
さて、ウェアハウスを設定するには、Snowflakeログイン後に表示されるダッシュボード上部の「Warehouse」アイコンをクリックします。
今回は作成済みのウェアハウスCOMPUTE_WH
を編集したいので、リストから該当のウェアハウスを選択して「Configure...」を押下します。
ウェアハウスのサイズは現在Large
に設定されていますが、検証のためにサイズをSmall
に変更し「Finish」を押下します。
これでウェアハウスの設定を変更することができました。
Snowflakeでは様々な操作をSQL分で実行することができ、この操作をSQLにすると以下のように表現できます。
ALTER WAREHOUSE "COMPUTE_WH" SET WAREHOUSE_SIZE = 'LARGE' AUTO_SUSPEND = 600 AUTO_RESUME = TRUE MIN_CLUSTER_COUNT = 1 MAX_CLUSTER_COUNT = 1 SCALING_POLICY = 'STANDARD' COMMENT = '';
4.2 データのロード
バルクロードは「Module 3: ロードするデータの準備」で用意したテーブルTRIPS
と外部ステージcitibike_trips
を使って行います。
作業を行う前にユーザの現在のコンテキストが以下のように設定されていることを確認します。
Role: SYSADMIN Warehouse: COMPUTE_WH (S) Database: CITIBIKE Schema = PUBLIC
画面では、右上に表示されています。
Snowflakeでは動的にロールやデータベース、スキーマなどを切り替えることができるので、現在のコンテキストを確認することが重要です。
適切なコンテキストを選択していることが確認出来たら、ワークシートを開いて以下のコマンドを実行します。
copy into trips from @citibike_trips file_format=CSV;
このコマンドにより、citibike_trips
として定義された外部ステージに保存されているCSVファイルをTRIPS
テーブルにバルクロードします。
画面では以下のような感じになります。
処理が完了すると画面下部に実行結果と実行時間が表示されます。ハンズオンラボのテキストではおおよそ30秒くらいかかると書いてありますが、私の検証時は36秒かかりました。
ところで、この演習の最初にウェアハウスのサイズをLarge
からSmall
に変更したのを覚えていますか?
Snowflakeではバルクロードをする際に使用するウェアハウス(コンピュートノード)のサイズを上げることで、処理の並列性を上げることができます。
これを確認するため、ウェアハウスのサイズをSmall
からLarge
に戻して同じ処理を実行してみます。
まず、先ほどロードしたデータを削除するために、Worksheetで以下のSQLを実行します。
truncate table trips;
次にウェアハウスのサイズを変更します。
サイズ変更はいくつかの方法がありますが、画面から操作する場合は、手順4.1で行ったようにWarehouseタブを開いてCOMPUTE_WH
を選択し「Configure...」ボタンを押下します。
ウェアハウスのサイズをSmall
からLarge
に変更して「Finish」ボタンを押下します。
ウェアハウスのサイズを変更したら、再度、Worksheetを開いてデータロードを実行します。
copy into trips from @citibike_trips file_format=CSV;
今度は14秒くらいで処理が完了できたことがわかります。
実行結果の右上に表示されている「Open History」をクリックすることで、実行結果の履歴を確認することもできます。
Snowflakeでは、このようにウェアハウスのサイズを大きくすることで、処理の並列度を上げて素早い処理を実現することが可能です。
なお、データロードに関してはひとつの巨大ファイルをロードするのではなく、10MBから100MB程度に分割されたファイルを利用することがパフォーマンスを上げるためのポイントです。
4.3 新しい仮想ウェアハウスの作成
次にアナリスト用のウェアハウスを新規作成してみます。
Warehouseタブから「Create...」ボタンを押下して新しいウェアハウスを作成します。
設定が完了したら「Finish」ボタンを押下して新しいウェアハウスを作成します。 SQLでは以下のようになります。
CREATE WAREHOUSE ANALYTICS_WH WITH WAREHOUSE_SIZE = 'LARGE' WAREHOUSE_TYPE = 'STANDARD' AUTO_SUSPEND = 600 AUTO_RESUME = TRUE MIN_CLUSTER_COUNT = 1 MAX_CLUSTER_COUNT = 1 SCALING_POLICY = 'STANDARD';
次の演習となる「Module 5: 分析クエリ、リザルトキャッシュ、クローニング」では、今回作成したANALYTICS_WH
を使用した演習を実施します。
まとめ
以上、「データのロード」についてご紹介いたしました。
明日の05日目は大高大輔による「Module 5: 分析クエリ、リザルトキャッシュ、クローニング」の予定です。お楽しみに!